{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "cd661c91",
   "metadata": {},
   "source": [
    "# 实验二    关联分析"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0142c925",
   "metadata": {},
   "source": [
    "## 实验目的"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e4aa1729",
   "metadata": {},
   "source": [
    "### 1、利用挖掘工具快速实现数据的预处理分析，并实现关联算法的过程；"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b381fb30",
   "metadata": {},
   "source": [
    "### 2、了解Apriori、FP关联规则算法在实际中的应用；"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "512cf07c",
   "metadata": {},
   "source": [
    "## 实验内容"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3fff51a",
   "metadata": {},
   "source": [
    "### 1、对原始数据进行数据探索性分析（比如查看每列属性平均值、最大值、最小值、标准差等）；"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d9ad11c0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "2a1aaadc",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 30 entries, M1 to M30\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Non-Null Count  Dtype \n",
      "---  ------  --------------  ----- \n",
      " 0   纬度；经度   30 non-null     object\n",
      " 1   海拔      30 non-null     object\n",
      " 2   坡度      30 non-null     object\n",
      "dtypes: object(3)\n",
      "memory usage: 960.0+ bytes\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 30 entries, M1 to M30\n",
      "Data columns (total 1 columns):\n",
      " #   Column   Non-Null Count  Dtype  \n",
      "---  ------   --------------  -----  \n",
      " 0   盖度（%）.1  30 non-null     float64\n",
      "dtypes: float64(1)\n",
      "memory usage: 480.0+ bytes\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 30 entries, 0 to 29\n",
      "Data columns (total 11 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   编号           30 non-null     int64  \n",
      " 1   土壤pH值        30 non-null     float64\n",
      " 2   土壤含水量（%）     30 non-null     float64\n",
      " 3   土壤容重（g/cm3)  30 non-null     float64\n",
      " 4   速效氮(mg/kg)   30 non-null     float64\n",
      " 5   速效磷(mg/kg)   30 non-null     float64\n",
      " 6   速效钾(mg/kg)   30 non-null     float64\n",
      " 7   全氮(g/kg)     30 non-null     float64\n",
      " 8   全磷(g/kg)     30 non-null     float64\n",
      " 9   全钾(g/kg)     30 non-null     float64\n",
      " 10  有机质(g/kg)    30 non-null     float64\n",
      "dtypes: float64(10), int64(1)\n",
      "memory usage: 2.7 KB\n"
     ]
    }
   ],
   "source": [
    "data1 = pd.read_excel(r'C:\\Users\\30382\\Desktop\\data\\退化草地植被及土壤特性调查数据.xlsx',sheet_name='样地信息',usecols=\"A,B,C,E\",\n",
    "index_col=0)\n",
    "data2 = pd.read_excel(r'C:\\Users\\30382\\Desktop\\data\\退化草地植被及土壤特性调查数据.xlsx',sheet_name='植被盖度信息',usecols=\"A,E\",\n",
    "index_col=0)\n",
    "data3 = pd.read_excel(r'C:\\Users\\30382\\Desktop\\data\\退化草地植被及土壤特性调查数据.xlsx',sheet_name='土壤信息')\n",
    "data1.info()\n",
    "data2.info()\n",
    "data3.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "7a31e160",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>纬度；经度</th>\n",
       "      <th>海拔</th>\n",
       "      <th>坡度</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>30</td>\n",
       "      <td>30</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unique</th>\n",
       "      <td>30</td>\n",
       "      <td>30</td>\n",
       "      <td>23</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>top</th>\n",
       "      <td>37°19′5.9″N；102°0′29″E</td>\n",
       "      <td>2847m</td>\n",
       "      <td>13°</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>freq</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         纬度；经度     海拔   坡度\n",
       "count                       30     30   30\n",
       "unique                      30     30   23\n",
       "top     37°19′5.9″N；102°0′29″E  2847m  13°\n",
       "freq                         1      1    3"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>盖度（%）.1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>30.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>62.500000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>19.440202</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>20.666667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>49.416667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>61.333333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>73.583333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>96.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         盖度（%）.1\n",
       "count  30.000000\n",
       "mean   62.500000\n",
       "std    19.440202\n",
       "min    20.666667\n",
       "25%    49.416667\n",
       "50%    61.333333\n",
       "75%    73.583333\n",
       "max    96.000000"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>编号</th>\n",
       "      <th>土壤pH值</th>\n",
       "      <th>土壤含水量（%）</th>\n",
       "      <th>土壤容重（g/cm3)</th>\n",
       "      <th>速效氮(mg/kg)</th>\n",
       "      <th>速效磷(mg/kg)</th>\n",
       "      <th>速效钾(mg/kg)</th>\n",
       "      <th>全氮(g/kg)</th>\n",
       "      <th>全磷(g/kg)</th>\n",
       "      <th>全钾(g/kg)</th>\n",
       "      <th>有机质(g/kg)</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "      <td>30.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>15.500000</td>\n",
       "      <td>6.938667</td>\n",
       "      <td>40.573333</td>\n",
       "      <td>1.040667</td>\n",
       "      <td>31.799722</td>\n",
       "      <td>5.193233</td>\n",
       "      <td>135.861111</td>\n",
       "      <td>4.355818</td>\n",
       "      <td>0.602242</td>\n",
       "      <td>18.945124</td>\n",
       "      <td>83.736024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>8.803408</td>\n",
       "      <td>0.487157</td>\n",
       "      <td>33.355318</td>\n",
       "      <td>0.218552</td>\n",
       "      <td>15.629139</td>\n",
       "      <td>2.965053</td>\n",
       "      <td>82.421007</td>\n",
       "      <td>2.641306</td>\n",
       "      <td>0.105913</td>\n",
       "      <td>2.016902</td>\n",
       "      <td>43.374213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>5.920000</td>\n",
       "      <td>14.940000</td>\n",
       "      <td>0.420000</td>\n",
       "      <td>17.103333</td>\n",
       "      <td>1.565922</td>\n",
       "      <td>44.500000</td>\n",
       "      <td>1.597728</td>\n",
       "      <td>0.352396</td>\n",
       "      <td>13.086194</td>\n",
       "      <td>31.405097</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>8.250000</td>\n",
       "      <td>6.622500</td>\n",
       "      <td>21.552500</td>\n",
       "      <td>0.907500</td>\n",
       "      <td>23.762917</td>\n",
       "      <td>3.197359</td>\n",
       "      <td>69.750000</td>\n",
       "      <td>2.963265</td>\n",
       "      <td>0.524137</td>\n",
       "      <td>17.959236</td>\n",
       "      <td>60.464720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>15.500000</td>\n",
       "      <td>6.785000</td>\n",
       "      <td>32.300000</td>\n",
       "      <td>1.055000</td>\n",
       "      <td>27.225833</td>\n",
       "      <td>4.712415</td>\n",
       "      <td>111.916667</td>\n",
       "      <td>3.488130</td>\n",
       "      <td>0.604148</td>\n",
       "      <td>18.871879</td>\n",
       "      <td>71.569274</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>22.750000</td>\n",
       "      <td>7.300000</td>\n",
       "      <td>40.710000</td>\n",
       "      <td>1.212500</td>\n",
       "      <td>30.092500</td>\n",
       "      <td>6.033590</td>\n",
       "      <td>179.666667</td>\n",
       "      <td>4.715530</td>\n",
       "      <td>0.648251</td>\n",
       "      <td>20.081270</td>\n",
       "      <td>85.038120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>30.000000</td>\n",
       "      <td>7.820000</td>\n",
       "      <td>181.220000</td>\n",
       "      <td>1.390000</td>\n",
       "      <td>86.035000</td>\n",
       "      <td>16.450553</td>\n",
       "      <td>345.000000</td>\n",
       "      <td>13.066584</td>\n",
       "      <td>0.886466</td>\n",
       "      <td>22.458450</td>\n",
       "      <td>240.646049</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              编号      土壤pH值    土壤含水量（%）  土壤容重（g/cm3)  速效氮(mg/kg)  速效磷(mg/kg)  \\\n",
       "count  30.000000  30.000000   30.000000    30.000000   30.000000   30.000000   \n",
       "mean   15.500000   6.938667   40.573333     1.040667   31.799722    5.193233   \n",
       "std     8.803408   0.487157   33.355318     0.218552   15.629139    2.965053   \n",
       "min     1.000000   5.920000   14.940000     0.420000   17.103333    1.565922   \n",
       "25%     8.250000   6.622500   21.552500     0.907500   23.762917    3.197359   \n",
       "50%    15.500000   6.785000   32.300000     1.055000   27.225833    4.712415   \n",
       "75%    22.750000   7.300000   40.710000     1.212500   30.092500    6.033590   \n",
       "max    30.000000   7.820000  181.220000     1.390000   86.035000   16.450553   \n",
       "\n",
       "       速效钾(mg/kg)   全氮(g/kg)   全磷(g/kg)   全钾(g/kg)   有机质(g/kg)  \n",
       "count   30.000000  30.000000  30.000000  30.000000   30.000000  \n",
       "mean   135.861111   4.355818   0.602242  18.945124   83.736024  \n",
       "std     82.421007   2.641306   0.105913   2.016902   43.374213  \n",
       "min     44.500000   1.597728   0.352396  13.086194   31.405097  \n",
       "25%     69.750000   2.963265   0.524137  17.959236   60.464720  \n",
       "50%    111.916667   3.488130   0.604148  18.871879   71.569274  \n",
       "75%    179.666667   4.715530   0.648251  20.081270   85.038120  \n",
       "max    345.000000  13.066584   0.886466  22.458450  240.646049  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(data1.describe())\n",
    "display(data2.describe())\n",
    "display(data3.describe())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dd58aba6",
   "metadata": {},
   "source": [
    "### 2、对原始数据进行预处理，转换算法支持的数据格式，使之符合关联规则算法的要求；"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "1a2d35af",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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RERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHp4ObsAhARUTGWkgIsXAicOAE0aAC88grg4eHsUlFRl54OHDwIREYCAQFAixaAq2uBF4MhioiI7G/5cmDYMDnYZTZunBzsliwBBg92RsmoKDt2DBgwADh+PPu0hg2BlSuBRo0KrDhsziMiIvuqWhUYMiR7gNKkp8v0qlULtlxUtA0eDDRubDlAAfJ848YFGs4ZorIIDw+HwWAAAGzYsAHBwcFwc3NDkyZNcOrUKSeXjoiokKtaFYiKsm7eqCgGKbLO4MFAWJh184aFFViQYojKwfnz5zFkyBB88MEHuHLlCmrXro1hw4Y5u1hERIXX8uXWByhNVJQsR5STY8esD1CasDBZzsEMSinl8FcpQsLDwxEUFISNGzfi6tWrGDFiBABg165d6N69O5KSkqxeV3x8PHx8fBAXFwdvb29HFZmIqHBwc8u5CS83rq5AWpr9y0PFQ6NGOTfh5bXc0aO6XtLa4zc7lgPYtGkTRo8ejdjYWIwaNQoA0KNHD7N5zpw5g1q1ajmjeEREhV9Kir4ABchyKSk8a4+yS0/XF6AAqYlKT3foWXv3fXPe9evX0a9fP0yYMAH79u3Dpk2bss1z7949zJ49Gy+99FKu60pJSUF8fLzZjYjovrBwoW3LL15sn3JQ8XLwoG3LHz5sn3Lk4L4PUVu3bkVQUBCGDx+OmjVrYsqUKdnmeffdd1G6dOk8+0TNnDkTPj4+GbeAgAAHlZqIqJA5ccK25f/6yz7loOIlMtK25SMi7FOOHNz3ISoqKgrVq1fPeBwSEmI2fefOnVi4cCFWr14Nd3f3XNc1ceJExMXFZdwibf3nExEVFQ0a2LZ8s2b2KQcVL7ZWRtSoYZ9y5OC+D1F+fn64evVqxuNLly5l/H3x4kX0798fCxcuRL169fJcl4eHB7y9vc1uRET3hVdesW354cPtUw4qXlq0sG355s3tU44c3PchKjQ0FKdPn0ZYWBjOnz+f0ZyXnJyMHj164Mknn0SvXr2QmJiIxMRE8GRGIiILPDz0d+B1dWWncrLM1VVGItejUSOHXwrmvg9R/v7+WLVqFaZOnYp27dqhbdu2AIBffvkFJ0+exOLFi1GmTJmMW4SD21eJiIqsJUsKdjm6P6xcqW+5r7+2bzks4DhRDsRxoojovpOfEcu1+a9ccVx5qHjIz4jlgFxWaOlS3S9n7fH7vq+JIiIiO7p6FahSxbp5GaDIWsuXA4MGWTevjQEqPxiiiIjIvq5eBZYty7k/iqurNNEwQFF+LF8uI5A3amR5ujayeQEFKIDNeQ7F5jwiuu+lpMhAmn/9JcMYDB/OTuRku/R0GUgzIkKGMWje3K6dyK09fjNEORBDFBERUdHDPlFEREREDsQQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDrpC1KpVq8we3759W3cBPvvsM5w9e1b38kRERETOkK8QlZ6ejoEDB+Krr77KeC4uLg6hoaG6C3D58mVMnToVSind6yAiIiIqaPkKUXv27MHq1avNnuvXrx+OHDmiuwA3btzAt99+i3Xr1uleBxEREVFBy1eI6tixI8LCwsyee+ONN+Du7q67AKdOnQIAtGnT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+vrio48+wqxZs/DVV1/pLQoRERFRgdPVnLdp0yb07NkTBoPBYogCTEMgeHh4oFatWnjooYfw2GOPoUePHtmutde9e3csXbo0x2a/oorNeUREREWPtcdvXSHqxIkTuHv3Ljw9PeHq6opbt26hcuXKSE1NRWpqKu7cuYOYmBjcvn0bkZGROHPmDM6ePYtjx47Bzc0NgwYNwsSJE1G5cmUAwMGDB/H7779j9OjRut9wYcQQRUREVPQ4tE9UgwYNMv6OiopC79698c8//+Q4/5QpU7BkyRIYDAbs3LkTa9euRf369fHOO+/g9ddfR4sWLbB+/Xo9RSEiIiJyCt2XfdFMnjwZp0+fznWeNm3aYP369XB1dUXnzp2xePFiHDt2DCdPnkS3bt2QkJCAPn36wGg02locIiIiogKhe4gDTWJiIpo2bYpz587lOE9qaip69uyJn3/+Odu03377DZ988gnCwsJQtmxZW4pS6LA5j4iIqOixa3NeQkICRo0ahffee89iR/KKFSsiMjIyx07mgHQ0P3z4MJo3b272fMeOHVG/fn3MmDEDH330kTXFISIiInI6q2qiFi9ejBdffNGmiwUrpdC/f3+sWrUqx+nF7WLErIkiIiIqeuxaE1W2bFl89NFHcHd3h7u7OwwGA1xdXTOGOJg9ezbGjx+f6zru3buHMWPGYMaMGahRo0a26cUtQBEREVHxZnOfKECuo/frr79mXBcvJ61bt0ajRo2waNEiW1+ySGBNFBERUdFj7fHb5rPzAKlFunXrVp7zde7cGcuXL8fJkyft8bJERERETmOXEKWUwtGjR/Ocr2PHjkhLS8OoUaPs8bJERERETmOXEDVo0CA8+uijec7XtGlTDBkyBGvXrrXHyxIRERE5jV36RJFl7BNFRERU9BRonygiIiKi+w1DFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDm7OLgDlk9EInDsH3LwJVKwI1KoFuDALk424XZGjpKUBv/4KnD8PhIQAjz0GuPHQQzZKTwcOHgQiI4GAAKBFC8DVtcCLwb1kURERATz1FODhAdStC7RvL/ceHvJ8RISzS0hFEbcrcpS9e4GqVQF3d+Dxx4FXX5V7d3d5fu9eZ5eQiqJjx4BGjSSIt2kD9O0r925u8vyxYwVaHIaoPMTGxmL//v2IiYlxXiGmTwcCA4EffpBfdZmlpcnzgYEyH5G1uF2Ro3TuLIE8Ksry9Kgomd65c8GWi4q2wYOBxo2B48ctTz9+XKYPHlxgRWKIyiI8PBwGgwEAsG7dOgQGBmLYsGHw9/fHunXrCr5A06cDkydbN+/kyTzgkXW4XZGjdO4szXfW+PVXBimyzuDBQFiYdfOGhRVYkDIopVSBvFIRER4ejqCgIMTGxqJmzZrYsWMHGjVqhOXLl2PKlCkIDw+3el3x8fHw8fFBXFwcvL2981+YiAipCciv8HCgRo38L0f3B25X5Ch790oNU37t2QO0a2f/8lDxcOyY1DDl19Gj0sSng7XHb9ZE5SA+Ph5z585Fo///BzRr1gzR0dEFW4gxY/QtN3asfctBxQu3K3KUvn31Ldevn33LQcXLgAH6lnv+efuWwwLWRAHYtGkTRo8ejdjYWIwaNQrvvvsuMn8sqampGDFiBNLT07FixQqr12tTTZTRKJ17s/ZVsYabG5CSwrOrKDtuV+QoaWnSaVyv1FSetUfZpafbtl2kpek6a481UVa6fv06+vXrhwkTJmDfvn3YtGmT2fSjR4+icuXK2Lp1K+bPn5/rulJSUhAfH2920+3cOX0HOkCWO39e/2tT8cXtihzF2n5QOdm1yz7loOLl4EHblj982D7lyMF9H6K2bt2KoKAgDB8+HDVr1sSUKVPMpjdq1Ai//PILatWqhWHDhuW6rpkzZ8LHxyfjFhAQoL9gN2/qXxYArl+3bXkqnrhdkaPYGrDPnrVPOah4iYy0bXkHD9Ny34eoqKgoVK9ePeNxSEiI2XSDwYDmzZsjLCwM33//PWJjY3Nc18SJExEXF5dxi7Tln1+xov5lAaBSJduWp+KJ2xU5SpZ9Z77Vrm2fclDxYktlBODwk2Hu+xDl5+eHq1evZjy+dOkSAGD37t0YP358xvMlSpSAwWCASy79QTw8PODt7W12061WLf3twG5utu/QqHjidkWO8thjti3fqZN9ykHFS4sWti3fvLl9ypGD+z5EhYaG4vTp0wgLC8P58+czmvNq166NRYsWYdGiRYiMjMSkSZMQGhpqWzDKDxcX4Ikn9C3bsyc7/5Jl3K7IUdzcgCpV9C1btSo7lZNlrq5Aw4b6lm3UyOGXgrnv94j+/v5YtWoVpk6dinbt2qFt27YAgCpVqmD9+vWYN28e6tevj6SkpHydmWcXc+boW+6TT+xbDipeuF2Ro6xdq2+5NWvsWw4qXlau1Lfc11/btxwWcIgDB7J5sE0gfyNLA8CMGcDEifpei+4f3K7IUfIzYjkAhIYC27Y5rjxUPORnxHIAGDIEWLpU98txiIPi4q23gPfft25eHujIWtyuyFG2b7e+fxQDFFlr+XJg0CDr5rUxQOUHQ1RR8NZbcsmNp57K3m/AzU2ej4jggY7yh9sVOcr27XIpl6pVLU+vWhX44w8GKMqf5ctzv5RLo0ZyEeICClAAm/Mcyi7NeVkZjTIey/Xrcrp5SAg7+5LtuF2Ro6SlyUCaZ8/KMAadOrETOdkuPV0G0oyIkGEMmje3aydya4/fDFEO5JAQRURERA7FPlFEREREDsQQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpIObswtA+aQUEB0NJCYCXl5A+fKAweDsUlFRx+2KHMVoBM6dA27eBCpWBGrVAlz4+51sVEj2WdySi4rYWGDePNkBVawIBAWZdkjz5sl0ovzidkWOEhEBPPUU4OEB1K0LtG8v9x4e8nxEhLNLSEVRIdtnGZRSqkBf8T4SHx8PHx8fxMXFwdvbW/+Ktm0DevcGkpLkceZ/mZa8S5UCvvsO6NJF/+vQ/YXbFTnK9OnA5Ml5z/f++8Bbbzm+PFQ8FOA+y9rjN2uisggPD4chU5XgrVu3EBQUhPDwcOcUaNs2oHt3IDlZNpismVd7LjlZ5tu2zTnlpKKF2xU5irUBCpD5pk93bHmoeCik+yzWRGURHh6OoKAgKKVw69Yt9OjRA/v378fFixcRGBiYr3XZXBMVGwv4+8tGYTTmPb+LC+DpCVy+DPj65v/16P7A7YocJSICyOd+EgAQHg7UqGHv0lBx4YR9Fmui7OCZZ57Bs88+67wChIVJtaU1Gw0g8yUlAStWOLZcVLRxuyJHGTNG33Jjx9q3HFS8FOJ9FkMUgE2bNqFmzZqoUKECVmT60BcvXoxRo0Y5p1BKAQsW6Ft2/vzsVZ1EALcrchyjEdi4Ud+yP/1k/QGS7i+FfJ9134eo69evo1+/fpgwYQL27duHTZs2ZUwLCgrK17pSUlIQHx9vdtMtOho4fz7/G4BSstzt2/pfm4ovblfkKOfOAWlp+pZNS5PtiyirQr7Puu9D1NatWxEUFIThw4ejZs2amDJliu51zZw5Ez4+Phm3gIAA/QVLTNS/LAAkJNi2PBVP3K7IUW7etG3569ftUw4qXgr5Puu+D1FRUVGoXr16xuOQkBDd65o4cSLi4uIybpGRkfoL5uWlf1kAKFPGtuWpeOJ2RY5SsaJty1eqZJ9yUPFSyPdZ932I8vPzw9WrVzMeX7p0Sfe6PDw84O3tbXbTrXx5ICQk/yOwGgyyXLly+l+bii9uV+QotWoBbjovguHmJtsXUVaFfJ9134eo0NBQnD59GmFhYTh//rxNzXl2ZTAAr72mb9lRo3jJDrKM2xU5iosL8MQT+pbt2ZOXgiHLCvk+i+NEAfjuu+8wfvx4JCcn4/nnn8dHH32EzB+LwWDgOFFUfHC7IkfhOFHkCBwnqnDr3bs3Lly4gKioKMyaNQtZc6VSKt8Byi58fWX4eoMh719pLi4y3/ff80BHueN2RY5So4ZcyiU/ZsxggKLcFeJ9FkNUYdelC7B5s6RqgyF71aT2nKcnsGULEBrqnHJS0cLtihzlrbesD1IzZgATJzq2PFQ8FNJ9FkNUUdCli1RLzp0LBAebTwsOluevXOGBjvKH2xU5yltvSRPdU09l72zu5ibPR0QwQFH+FMJ9FvtEOZDNfaIsUUoGD0tIkFM3y5VjZ1+yHbcrchSjUQY9vH5dhjEICWEncrKdg/dZ1h6/GaIcyCEhioiIiByKHcuJiIiIHIghioiIiEgHhigiIiIiHRiiiIiIiHRgiCIiIiLSQefVIska2omP8fHxTi4JERERWUs7buc1gAFDlAMlJCQAAAICApxcEiIiIsqvhIQE+Pj45Did40Q5kNFoxNWrV1GmTBkY7DwIWEBAACIjIzn+FNkNtytyFG5b5AiO3K6UUkhISEDVqlXhksvgsKyJciAXFxf4+/s7bP3e3t7cIZHdcbsiR+G2RY7gqO0qtxooDTuWExEREenAEEVERESkA0NUEeTh4YF3330XHh4ezi4KFSPcrshRuG2RIxSG7Yody4mIiIh0YE0UERERkQ4MUUREREQ6MEQRERER6cAQRUTZxMbGYv/+/YiJiXF2UYiICi2GqELut99+Q2BgoMVpGzZsQHBwMNzc3NCkSROcOnWqYAtHRVZu29W6desQGBiIYcOGwd/fH+vWrSvYwlGRltu2lVnXrl2xfPlyh5eHiofctqtRo0bBYDBk3GrWrFlg5WKIKqLOnz+PIUOG4IMPPsCVK1dQu3ZtDBs2zNnFoiIuLi4OI0eOxP/+9z8cP34cCxcuxPjx451dLCpmVq1ahW3btjm7GFRMHDp0CJs3b0ZMTAxiYmJw5MiRAnttXvaliDp16hQ++OAD9O3bFwDw8ssvo3v37k4uFRV18fHxmDt3Lho1agQAaNasGaKjo51cKipObt++jXHjxqFOnTrOLgoVA2lpafjnn3/QoUMHeHl5FfjrsyaqiPjpp59Qo0YNlCtXDp9++il69OiBESNGZEw/c+YMatWq5cQSUlGUdbsKCAjAc889BwBITU3FnDlz0KtXLyeXkoqirNuWZty4cejVqxdat27txNJRUZV1uzp+/DiMRiOaNGkCT09PdO3aFZcuXSqw8jBEFQHR0dH48MMPsWXLFrz33nsYN24c7t69mzH93r17mD17Nl566SUnlpKKmty2q6NHj6Jy5crYunUr5s+f7+SSUlGT07a1a9cu7NixA7NmzXJ2EakIsrRdnTx5EnXq1MHXX3+NY8eOwc3NzayCweEUFWq7du1SANTRo0eVUkqlpKQoACo8PDxjnv/+97+qcePG6t69e84qJhUxeW1XRqNRHTp0SLVv31717t3bmUWlIia3batWrVpq06ZNSimlBg0apJYtW+bEklJRYs2xUCmlIiIilIuLi4qLiyuQcrFPVBFQtmzZjD4qJUqUAACo/79az86dO7Fw4ULs27cP7u7uTisjFT25bVcGgwHNmzdHWFgYQkJCEBsbC19fX2cVlYoYS9vWpEmT0KJFC/bdJN1y22dp/Pz8YDQaERUVBW9vb4eXic15RUBOG8LFixfRv39/LFy4EPXq1SvgUlFRZ2m7ioiIMDsbr0SJEjAYDHBx4a6CrGdp21q9ejU2bNgAX19f+Pr6YvXq1Rg5ciRGjhzphBJSUWRpuxo/fjxWr16d8fjPP/+Ei4sLAgICCqRMrIkqopKTk/H000/jySefRK9evZCYmAgAKF26NAwGg5NLR0VViRIlsGjRItSqVQuPP/44Jk+ejNDQ0AL5RUfF2549e+Dv75/x+I033kDr1q0xePBg5xWKirzGjRtj8uTJqFSpEtLT0/Haa69h4MCBKFWqVIG8PkNUEfXLL7/g5MmTOHnyJBYvXpzx/MWLF60a6I7IkipVqmD9+vUYPXo03njjDXTp0gUrVqxwdrGoGPD39zfbN3l5eaFChQqoUKGC8wpFRd6AAQNw584d9O7dG66urhgwYABmzJhRYK9vUFkbFImIiIgoT+zoQERERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBERERHpwBBFREREpANDFBEREZEODFFEREREOjBEEREREenAEEVERESkA0MUERERkQ4MUUREREQ6MEQRERER6cAQRURERKQDQxQRERGRDgxRRERERDowRBER2VFycnKe8xiNxgIoCRE5GkMUEd23tm/fjv/+97+IiYmx2zrnzZuHZ555BhcuXMhxnq+++gq9e/fGgQMH7Pa6RFTwGKKIqNhatmwZTpw4keP0X3/9FR9++CFGjhxpt9f08PDAmjVrMGPGDCilLM5z9+5dfP/993j77beRkpKCQ4cO4eWXX0Z0dLTdykFEjscQRUTFVocOHdChQwdMmjQJ6enp2abv3LkTlSpVwuLFi61anzUhx93dHQAwefJkGAwGi/PcuXMHAPDf//4XHh4eePDBBxEYGIh69ephx44dVpWFiJyPIYqIiq2QkBBMmjQJM2fOxIIFC8ym/fvvvzh06BDeffddeHl55bmud955By1atMD169dznc/NzS3PdcXFxQEAgoKCMp4bP348qlatip49e+LKlSt5roOInC/vbzsRURH20ksvYfr06dmCyerVq1GyZEl8++23WLNmTZ7ruXv3Lvz8/DB16lQsXLgwx1omF5e8f5vGxsbC1dUV/v7+ZstNmjQJAwYMyLEZkIgKF4YoIirWvLy8MG3aNDz55JO4du0aypcvD4PBgKVLl2LSpEl4++237fp6mcPVtWvXMGPGDMyePTujmQ+QZsGqVatmq7Xq06cPWrZsicTERLRo0QI//PCDWdAiosLFoPiTh4juEzNnzsSECROwZs0ajB8/HufOnYOnp2eey929exclS5a0OO3NN980O8suKioKZ8+eRatWrXD58mVcuXIFffv2ReXKlXH06FEAwPHjx3Hv3j00b97c4jpPnDiB6Oho1K9fH3v37oWvr2/+3ywRORxDFBEVO2+99Rb69++PBg0aZHt++vTpaN68OR577DEkJydj3rx5OTbNAcDJkyfRrVs3fP/992jWrFm26XFxcTAajShbtiwAYMmSJRg+fDguXryIwMDAjPliY2MBAL6+vqhSpQp69uyJL7/80vY3S0ROw+Y8Iip2+vTpg4ceeghz587F0KFDAQDnzp2Dv78/Vq9ejY4dO8Lf3x+jRo3CoUOHUKJEiRzXdfPmTURERGDu3LlYsWJFtuk+Pj5WlUmrTUpMTMS1a9fQqFGj/L8xIipUGKKIqNhp0qQJnnnmGQwbNgwPPPAA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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import xlwings as xw  # 导入xlwings模块\n",
    "\n",
    "df = pd.read_excel(r'C:\\Users\\30382\\Desktop\\data\\数据分类.xlsx')  # 从指定工作簿中获取数据\n",
    "figure = plt.figure()  # 绘制一个绘图窗口\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']  # 为图表的中文文本设置默认字体，以避免中文显示乱码问题\n",
    "plt.rcParams['axes.unicode_minus'] = False  # 解决坐标值为复数时无法显示负号的问题\n",
    "\n",
    "x = df['海拔']  # 指定’海拔‘列为X轴\n",
    "y = df['坡度']  # 指定’坡度‘列为Y轴\n",
    "\n",
    "plt.scatter(x, y, s=100, color='red', marker='o', label='标志')  # 制作散点图\n",
    "plt.legend(loc='upper right', fontsize=10)  # 添加并设置图例\n",
    "\n",
    "# 添加并设置图表标题、X轴标题、Y轴标题\n",
    "plt.title(label='海拔与坡度关系图', fontdict={'family': 'KaiTi', 'color': 'red', 'size': 30}, loc='left')\n",
    "plt.xlabel('海拔', fontdict={'family': 'SimSun', 'color': 'black', 'size': 20}, labelpad=20)\n",
    "plt.ylabel('坡度', fontdict={'family': 'SimSun', 'color': 'black', 'size': 20}, labelpad=20)\n",
    "plt.show()           # 直接显示图表\n",
    "\n",
    "app = xw.App(visible=False)  # 启动Excel程序\n",
    "workbook = app.books.open(r'C:\\Users\\30382\\Desktop\\data\\数据分类.xlsx')  # 打开要插入图表的工作铺\n",
    "worksheet = workbook.sheets['sheet1']  # 选中要插入图表的工作表\n",
    "worksheet.pictures.add(figure, top=400)  # 在工作铺中插入散点图\n",
    "workbook.save()  # 保存工作铺\n",
    "workbook.close()  # 关闭工作铺\n",
    "app.quit()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ae5ce88b",
   "metadata": {},
   "source": [
    "### 3、在步骤2得到的建模数据基础上，选择合适的关联规则算法（Apriori、FP-Tree或Eclat算法或灰色关联算法）关联规则算法调整模型输入参数，完成不同程度退化草地与土壤测定指标、（生境、海拔、坡度）之间的关联性分析；（前件、后件如何选择，根据你的需求）；"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "607ad58b",
   "metadata": {},
   "source": [
    "### 4、结合实际，对模型结果进行分析，根据分析结果对关联规则进行必要的结论解释。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ead2237e",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
